// m

// 给定一个未排序的整数数组nums
// 找出数字连续的最长序列（不要序列元素在原数组中连续）的长度，并且要用时间复杂度为O(n)的算法解决此问题

// 思路： 哈希表
// 1. 先将数组存储到集合中进行去重，然后使用curr_streak维护当前连续序列的长度，使用ans维护最长连续序列长度
// 2. 遍历集合中的元素，对每个元素进行判断，如果该元素不是序列的开始（即num-1在集合中），则跳过
// 3. 如果num-1不在集合中，说明num是序列的开始，判断num+1，num+2.，是否在哈希表中，并不断更新当前连续序列的长度curr_streak，并在遍历结束之后更新最长序列的长度
// 4. 最后输出最长序列长度

function longestConsecutive(nums) {
    let ans = 0
    let nums_set = new Set(nums)

    for (let i = 0; i < nums.length; i++) {
        if (!nums_set.has(nums[i] - 1)) {
            let curr_num = nums[i]
            let curr_streak = 1
            while (nums_set.has(curr_num + 1)) {
                curr_num += 1
                curr_streak += 1
            }
            ans = Math.max(ans, curr_streak)
        }
    }
    return ans
}

let nums = [100,4,200,1,3,2]
console.log(longestConsecutive(nums))